package com.tjcu.action;

import com.opensymphony.xwork2.ActionSupport;
import com.tjcu.entity.User;
import com.tjcu.service.UserService;
import com.tjcu.service.impl.UserServiceImpl;
import com.tjcu.utils.Base64Utils;
import com.tjcu.utils.MD5Utils;
import com.tjcu.utils.RandomUtils;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.sql.SQLException;


/**
 * @author 王恒杰
 * @version 1.0
 * @date 2021/10/31 14:35
 * @email 1078993387@qq.com
 * @Address 天津
 * @Description:
 */
public class UserAction extends ActionSupport {
    private User user;
    private String code;


    /**
     * 检查用户名是否存在（自己检查）
     *
     * @return
     */
    public int check() {
        return 0;
    }


    public String register() {
        //request
        HttpServletRequest request = ServletActionContext.getRequest();
        /**
         * 已经赋值：用户名 密码 邮箱 性别
         * 没有赋值：  激活状态 账号类型 激活码
         */
        //未激活状态 0 ，激活状态1
        user.setStatus(0);
        //账号类型 普通用户 0 管理员 1
        System.out.println("角色："+user.getRole());

        //激活码 使用随机生成工具包
        user.setCode(RandomUtils.createActive());

        //2、处理传入的数据
        //需要处理的属性 对密码进行加密
        user.setPassword(MD5Utils.md5(user.getPassword()));

        //调用用户的业务逻辑进行注册
        UserServiceImpl userService = new UserServiceImpl();

        try {
            userService.register(user);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            request.setAttribute("registerMsg", "注册失败");
            return ERROR;
        }
        //响应
        return SUCCESS;
    }

    /**
     * 激活码
     *
     * @return
     */
    public String active() {
        //request
        HttpServletRequest request = ServletActionContext.getRequest();
        //调用业务层
        UserService userService = new UserServiceImpl();
        //1.获取激活码 激活码c是EmailUtils中定义了的
        String c = request.getParameter("c");
        //解码
        String decode = Base64Utils.decode(c);
        System.out.println(decode);
        //2.调用激活码的业务逻辑
        int i = 0;
        try {
            i = userService.activeUser(decode);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //判断当前用户激活状态
        if (i == 0) {
            request.setAttribute("msg", "激活失败，请重新激活！");
        } else if (i == 1) {
            request.setAttribute("msg", "激活成功！");
        } else if (i == 2) {
            request.setAttribute("msg", "您已经激活成功了！不需要重复激活！");
        }
        //3.响应（激活失败（code找到） 已经激活(激活成功)
        return SUCCESS;
    }

    /**
     * 1.提交账号和验证码
     * 2.对比验证码 成功---》对比账号和密码
     * 3.对比账号密码
     * 失败--》回到登录页面进行提示
     * 成功--》未激活 登录页面 进行提示
     * --》激活 程序的首页，将用户放到session共享域
     *
     * @return
     */
    public String userLogin() {
        HttpSession session = ServletActionContext.getRequest().getSession();
        if(session.getAttribute("validationCode").equals(code)){
            UserService userService = new UserServiceImpl();
            String p = MD5Utils.md5(user.getPassword());
            user = userService.showByUsernameAndPassword(user.getUsername(), p);
            if(user!=null){
                session.setAttribute("user",user);
                return SUCCESS;
            }
            return ERROR;
        }else{
            return ERROR;
        }

    }
    public String dropSession(){
        ServletActionContext.getRequest().getSession().invalidate();
        return SUCCESS;
    }

    public User getUser() {
        return user;
    }


    public void setUser(User user) {
        this.user = user;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
